Read Buf

Read Buf

Meta 如何大规模训练大型 AI 语言模型?

ai

随着我们越来越专注于用 AI 解决复杂问题,我们面临的一个最大挑战就是训练大语言模型 (LLMs) 所需的庞大计算资源。

传统上,我们训练 AI 模型时,会用相对较少的 GPU 训练大量模型。比如,我们的推荐系统模型(如 feed 和排名模型)会处理大量信息,以提供准确的推荐,从而驱动大多数产品。

随着生成式 AI (Generative AI, GenAI) 的出现,虽然工作量减少了,但每个任务的规模变得巨大。要支持大规模的 GenAI,我们必须重新思考软件、硬件和网络基础设施的整合方式。

大规模模型训练的挑战

随着 GPU 数量在作业中增加,因硬件故障导致中断的可能性也会随之上升。而且,这些 GPU 还需要在同一个高速网络中进行通信才能达到最佳性能。所以,以下四个因素显得尤为重要:

  • 硬件可靠性:确保硬件的高可靠性至关重要。我们需要通过严格的测试和质量控制措施,尽量减少硬件故障引发的中断,并利用自动化手段快速检测和解决问题。
  • 快速故障恢复:即使硬件故障是不可避免的,当故障发生时,我们需要快速恢复。这就要求尽量减少重新调度的时间,并迅速重新初始化训练。
  • 高效保存训练状态: 当训练过程中发生故障时,我们需要能够继续之前的进度。这意味着我们必须定期保存训练状态,并高效地存储和检索训练数据。
  • 优化 GPU 之间的连接: 大规模模型训练需要在 GPU 之间同步传输大量数据。如果部分 GPU 之间的数据交换速度比较慢,会导致整体任务的速度放缓。解决这个问题需要建立一个强大且高速的网络基础设施,并且采用高效的数据传输协议和算法。

基础设施栈的创新

为了满足大型生成式 AI (GenAI) 对规模的需求,完善基础设施栈的每一层变得至关重要。这涉及到多个领域的发展和创新。

训练软件

我们使研究人员能够使用 PyTorch 和其他新的开源开发技术,从而极大地加速了从研究到生产的转化过程。这包括开发新算法和技术进行高效的大规模训练,并将新的软件工具和框架集成到我们的基础设施中。

调度

高效的调度有助于确保我们资源的最佳利用。这需要采用复杂的算法,根据不同任务的需求分配资源,并通过动态调度应对不断变化的工作负载。

硬件

要应对大规模模型训练的计算需求,我们需要高性能的硬件。不仅是规模和大小,许多硬件配置和属性也需要为生成式 AI (GenAI) 做出最佳优化。由于硬件开发通常需要较长时间,我们不得不改用现有硬件,因此我们从多个方面进行了探索,包括功耗、HBM (高带宽存储) 的容量和速度,以及输入输出 (I/O) 。

我们还对 Grand Teton 平台进行了调整,该平台使用 NVIDIA H100 GPU。我们将 GPU 的热设计功耗 (TDP) 提高到 700W,并改用 HBM3 存储。由于没有时间更改冷却系统,我们保留了空气冷却方式。为此,我们的机械和热设计也进行了相应修改,以便能够支持大规模部署,这也触发了一个新的验证周期来确保系统的可靠性。所有这些与硬件相关的更改都非常具有挑战性,因为我们必须在受限的资源条件下找到适用的解决方案,并且可调整的范围非常小,还要满足紧迫的时间要求。

数据中心部署

一旦我们选择了 GPU 和系统,就需要考虑如何将它们放置在数据中心,以便优化资源使用(如电力、冷却和网络等)。需要重新审视为其他类型工作负载所做的权衡。数据中心的电力和冷却基础设施无法快速(或轻易)改变,我们必须找到一种最佳布局,使数据大厅内的计算能力最大化。为此,我们需要将支持服务(如读器)移出数据大厅,并尽可能多地安装 GPU 机架,以在一个大型网络集群中最大化计算密度和网络能力。

可靠性

为了减少硬件故障带来的停机时间,我们需要制定检测与修复计划。随着集群规模的扩大,故障数量也会增加,因此对于跨集群的任务,我们必须保持足够的备用容量,确保任务能够尽快重新启动。此外,通过监控故障情况,我们可以有时采取预防措施,进一步减少停机时间。

我们观察到的常见故障模式包括:

  • GPU 脱离: 在这种情况下,主机无法通过 PCIe 总线检测到 GPU。尽管这种故障有多种可能的原因,但在服务器的初期使用阶段更为常见,随着时间推移会逐渐减少。
  • DRAM 和 SRAM UCE: 内存中常见不可纠正错误(UCE)。我们会监控并识别频繁出现的错误,将其与阈值比较,并在错误率超过厂商设定的阈值时启动 RMA 流程。
  • HW 网络电缆: 在无法访问的服务器中,这些故障通常发生在服务器使用初期。

网络

大规模模型训练需要在 GPU 之间快速传输海量数据,因此需要强大且高速的网络基础设施,以及高效的数据传输协议和算法。在业界,有两种主要选择能够满足这些需要:RoCE 和 InfiniBand 结构。但这两种选择各有优劣。一方面,Meta 在过去四年里已经建设了 RoCE 集群,但这些集群最大只能支持 4K 个 GPU。我们需要更大规模的 RoCE 集群。另一方面,Meta 也已经建设了使用 InfiniBand 的研究集群,规模可以达到 16K 个 GPU 16K GPUs。不过,这些集群并未紧密整合到 Meta 的生产环境中,也没有针对最新一代的 GPU 和网络进行构建。这使得选择使用哪种结构变得相当困难。于是我们决定同时构建两种集群:两个 24k 集群,一个使用 RoCE,另一个使用 InfiniBand。通过实际操作,我们希望能从中学习经验,这些经验将为未来的 GenAI 网络架构提供方向。我们将 RoCE 集群优化以缩短构建时间,而将 InfiniBand 集群优化以实现全双工带宽。我们在训练 Llama 3 时同时使用了 InfiniBand 和 RoCE 集群,其中 RoCE 集群负责训练最大的模型。尽管这两个集群的底层网络技术有所不同,但我们还是成功地调优它们,使它们在大型 GenAI 工作负载下表现出相同的性能。

为提升 GenAI 模型在这两个集群上的网络通信性能,我们对整体架构的三个方面进行了优化:1. 我们将由于不同模型、数据和流水线并行性产生的通信模式分配给网络拓扑的不同层次,以充分利用网络的能力。 2. 我们引入了考虑网络拓扑特性的集体通信模式,减少其对延迟的敏感度。我们通过使用自定义算法,例如递归双倍或递归减半,来替换传统的环形算法,实现这一点。 3. 生成式 AI 作业会产生额外的大流量,难以将流量均匀分配到所有可能的网络路径。这需要我们进一步投资网络负载均衡和路由,以实现对网络资源的最佳分配。我们在 Networking @Scale 2023 会议中,详细介绍了我们的 RoCE 负载均衡技术

存储

为了存储模型训练所需的海量数据,我们需要高效的数据存储解决方案。这不仅需要投资大容量和高速存储技术,还需针对特定工作负载开发新的数据存储方法。